package org.web.abc.stockanalysis.server.biz.impl;

import org.apache.commons.beanutils.BeanUtils;
import org.springframework.stereotype.Service;
import org.web.abc.stockanalysis.server.domain.AccountInfoDO;
import org.web.abc.stockanalysis.server.domain.query.QueryAccountInfo;
import org.web.abc.stockanalysis.server.service.AccountInfoService;
import org.web.base.domain.InsertGroup;
import org.web.base.domain.ResultDO;
import org.web.base.domain.UpdateGroup;
import org.web.base.domain.helper.ResultHelper;
import org.web.base.domain.helper.ValidationHelper;
import javax.annotation.Resource;
import java.util.ArrayList;

import java.util.List;
import org.web.abc.stockanalysis.sdk.biz.AccountInfoBiz;
import org.web.abc.stockanalysis.sdk.dto.AccountInfoDTO;
import org.web.abc.stockanalysis.sdk.dto.query.QueryAccountInfoRequest;

@Service("accountInfoBiz")
public class AccountInfoBizImpl implements AccountInfoBiz {

    @Resource
    private AccountInfoService accountInfoService;

    @Override
    public ResultDO<List<AccountInfoDTO>> selectAccountInfoList(QueryAccountInfoRequest queryAccountInfoRequest) {
        ResultDO<List<AccountInfoDTO>> resultDO = new ResultDO<>();
        try {
            ValidationHelper.validateWithThrow(QueryAccountInfoRequest.class, queryAccountInfoRequest);
            QueryAccountInfo queryAccountInfo = new QueryAccountInfo();
            BeanUtils.copyProperties(queryAccountInfo, queryAccountInfoRequest);
            List<AccountInfoDO> lis = accountInfoService.selectAccountInfoList(queryAccountInfo);
            List<AccountInfoDTO> list = new ArrayList<>();
            resultDO.setDomain(list);
            for (AccountInfoDO accountInfoDO : lis) {
                AccountInfoDTO accountInfoDTO = new AccountInfoDTO();
                BeanUtils.copyProperties(accountInfoDTO, accountInfoDO);
                list.add(accountInfoDTO);
            }
        } catch (Exception e) {
            return ResultHelper.buildResultDOByException(e);
        }
        //accountInfoService.selectAccountInfoList();
        return resultDO;
    }

    @Override
    public ResultDO<Integer> countAccountInfoList(QueryAccountInfoRequest queryAccountInfoRequest) {
        return null;
    }

    /**
    * 批量保存账户信息列表
    *
    * 该方法用于将传入的账户信息列表批量保存到数据库中。
    *
    * @param list 账户信息DTO对象列表，每个DTO包含一个账户的相关信息
    * @return 返回一个ResultDO对象，其中包含操作的结果状态、消息以及成功保存的账户信息列表。
    *         若操作成功，ResultDO的status属性为"success"，message属性为空或包含成功提示信息，
    *         data属性为成功保存的AccountInfoDTO列表。
    *         若操作失败，ResultDO的status属性为"failure"，message属性包含错误信息，data属性为null或包含部分成功保存的AccountInfoDTO列表。
    *
    * @throws IllegalArgumentException 如果输入的列表中包含null元素
    *
    * 注意事项：
    * 1. 该方法接收一个账户信息对象列表，每个对象代表一个账户的信息。
    * 2. 在保存之前，方法会对传入的参数进行基本的校验，如空值校验和格式校验。
    * 3. 该方法会尝试批量保存账户信息，如果列表中的某个账户信息保存失败，则直接返回失败结果，不对其他元素进行处理。
    * 4. 返回结果中会包含操作的状态、消息以及成功保存的账户信息列表，方便调用者根据返回信息进行后续处理。
    */
    @Override
    public ResultDO<List<AccountInfoDTO>> batchSaveAccountInfoList(List<AccountInfoDTO> list) {
       return null;
    }

    @Override
    public ResultDO<Integer> batchDeleteAccountInfoList(List<Integer> accountInfoIdList) {
        return null;
    }
}